home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 February / EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso / earcd / comm2 / rpgbbs3.lha / Include / btree.h next >
C/C++ Source or Header  |  1995-04-02  |  4KB  |  87 lines

  1. /*****************************\
  2.  *   B Tree Header File V4   *
  3.  *                           *
  4.  *  Created by Robert Hurst  *
  5.  *   on September 6, 1990    *
  6. \*****************************/
  7. #define B_VERSION            4
  8. #define B_MAXLEVELS            12
  9. #define B_MAXKEYS            4
  10. #define B_NODE(sub1,sub2)    (*b->Bnp[sub1]->node[sub2])
  11. #define B_NUMKEYS(sub1)        (*b->Bnp[sub1]->numkeys)
  12. #define B_SUCCESSFUL        0
  13. #define B_CREATE_ERROR        1
  14. #define B_OPEN_ERROR        2
  15. #define B_KEY_NOT_FOUND        3
  16. #define B_STORE_ERROR        4
  17. #define B_UPDATE_ERROR        5
  18. #define B_DELETE_ERROR        6
  19. #define B_STACK_TOO_DEEP    7
  20. #define B_END_OF_FILE        8
  21.  
  22. struct B {
  23.     FILE *Bfh;                            /* File Handle */
  24.     struct Bheader *Bhp;                /* Pointer to B-Tree Header structure */
  25.     struct Bnode *Bnp[3];                /* Pointer to B-Tree Node structure */
  26.     unsigned long filepos[3];            /* Last file cursor position accessed */
  27.     int keypos[3];                        /* Last node position accessed (0-4) */
  28.     unsigned char Bsp;                    /* Stack pointer */
  29.     unsigned long Bnodes[B_MAXLEVELS+1];/* Stack storage for nodes */
  30.     unsigned char Bkeys[B_MAXLEVELS+1];    /* Stack storage for keys */
  31.     unsigned char Bstatus;                /* I/O status of last operation */
  32. };
  33.  
  34. struct Bheader {
  35.     char id[4];                            /* File identification code ("MWBT") */
  36.     unsigned char version;                /* B-Tree version number */
  37.     unsigned long filesize;                /* Number of bytes in file */
  38.     unsigned long nodesize;                /* Number of bytes in node */
  39.     unsigned short keysize;                /* Number of bytes in key */
  40.     unsigned long nodes;                /* Number of active nodes in file */
  41.     unsigned long keys;                    /* Number of active keys in file */
  42.     unsigned long root;                    /* Pointer to root node */
  43.     unsigned long free;                    /* Pointer to next free node */
  44. };
  45.  
  46. struct Bnode {
  47.     unsigned long *node[B_MAXKEYS+1];    /* Left node pointers (0-4) */
  48.     unsigned char *numkeys;                /* Number of active keys in this node */
  49.     char *key[B_MAXKEYS];                /* Pointer to key data */
  50. };
  51.  
  52. /* Prototypes for functions defined in Btree.c */
  53. void __asm Bputheader(register __a0 struct B * );
  54. void __asm Bgetnode(register __a0 struct B * , register __d0 unsigned long , register __d1 unsigned char );
  55. void __asm Bputnode(register __a0 struct B * , register __d0 unsigned long , register __d1 unsigned char );
  56. unsigned long __asm Bfree(register __a0 struct B * );
  57. char * __asm Berror(register __a0 struct B * );
  58. void __asm Bcreate(register __a0 struct B * , register __a1 char * , register __d0 unsigned short );
  59. void __asm Bclose(register __a0 struct B * );
  60. void __asm Bopen(register __a0 struct B * , register __a1 char * );
  61. void __asm Bnext(register __a0 struct B * , register __a1 char * );
  62. void __asm Bget(register __a0 struct B * , register __a1 char * );
  63. void __asm Bprev(register __a0 struct B * , register __a1 char * );
  64. void __asm Bfirst(register __a0 struct B * , register __a1 char * );
  65. void __asm Blast(register __a0 struct B * , register __a1 char * );
  66. void __asm Bstore(register __a0 struct B * , register __a1 char * );
  67. void __asm Bdelete(register __a0 struct B * , register __a1 char * );
  68. void __asm Bupdate(register __a0 struct B * , register __a1 char * );
  69.  
  70. /* "btree.library"*/
  71. #pragma libcall BtreeBase Bputheader 1e 801
  72. #pragma libcall BtreeBase Bgetnode 24 10803
  73. #pragma libcall BtreeBase Bputnode 2a 10803
  74. #pragma libcall BtreeBase Bfree 30 801
  75. #pragma libcall BtreeBase Berror 36 801
  76. #pragma libcall BtreeBase Bcreate 3c 09803
  77. #pragma libcall BtreeBase Bclose 42 801
  78. #pragma libcall BtreeBase Bopen 48 9802
  79. #pragma libcall BtreeBase Bnext 4e 9802
  80. #pragma libcall BtreeBase Bget 54 9802
  81. #pragma libcall BtreeBase Bprev 5a 9802
  82. #pragma libcall BtreeBase Bfirst 60 9802
  83. #pragma libcall BtreeBase Blast 66 9802
  84. #pragma libcall BtreeBase Bstore 6c 9802
  85. #pragma libcall BtreeBase Bdelete 72 9802
  86. #pragma libcall BtreeBase Bupdate 78 9802
  87.